/* 剩余参数 */
// 剩余参数语法允许我们将一个不定数量的参数表示为一个数组。
//语法  function(a, b, ...theArgs) {   }
function sum(...theArgs) {
  return theArgs.reduce((previous, current) => {
    return previous + current;
  });
}

console.log(sum(1, 2, 3));
// expected output: 6

console.log(sum(1, 2, 3, 4));
// expected output: 10


/* 解构 */
//解构赋值语法是一种 Javascript 表达式。通过解构赋值, 可以将属性/值从对象/数组中取出,赋值给其他变量。
let a, b, rest;
[a, b] = [10, 20];

console.log(a);
// expected output: 10

console.log(b);
// expected output: 20

[a, b, ...rest] = [10, 20, 30, 40, 50];

console.log(rest);
// expected output: Array [30,40,50]

//利用解构交换变量
var aa = 1;
var bb = 3;

[aa, bb] = [bb, aa];
console.log(aa); // 3
console.log(bb); // 1

//将剩余参数与解构配合使用

[a, b, ...rest] = [10, 20, 30, 40, 50];

console.log(rest);
// expected output: Array [30,40,50]

//在函数上获取参数
function f(...[a, b, c]) {
  return a + b + c;
}

console.log(f(1)); // NaN (b and c are undefined)
console.log(f(1, 2, 3)); // 6
console.log(f(1, 2, 3, 4)); // 6 (the fourth parameter is not destructured)

//因为theArgs是个数组，所以你可以使用length属性得到剩余参数的个数：
function fun1(...theArgs) {
  console.log(theArgs.length);
}

fun1(); //  0, 因为theArgs没有元素
fun1(5); // 1, 因为theArgs只有一个元素
fun1(5, 6, 7); // 3, 因为theArgs有三个元素